package com.text.day3_4;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;
import java.util.Map.Entry;


public class IpText {
    public static void main(String[] args) throws IOException {
        // 读取一个文本文件中的内容
        String filepath = "D:\\txt\\java\\java2306\\code\\java2306\\src\\com\\text\\day3_4\\IP.txt";

        // 创建一个可以逐行读取文件内容的对象  （创建对象）
        BufferedReader bufferedReader = new BufferedReader(new FileReader(filepath));

        // 集合对象
        ArrayList<String> arrayList = new ArrayList<>();

        // 调用对象的方法，完成我们需要的功能
        String line = "";

        // while循环
        while ((line = bufferedReader.readLine()) != null) {
            arrayList.add(line);
        }

        System.out.println(arrayList);

        HashSet<String> hashSet = new HashSet<>(arrayList);
        System.out.println(hashSet);

        HashMap<String, Integer> hashMap = new HashMap<>();
        for (String c : arrayList) {
            hashMap.put(c, hashMap.get(c) == null ? 1 : hashMap.get(c) + 1);  // 用不了++
        }
        System.out.println(hashMap);



        System.out.println("排序");
//        System.out.println(hashMap.entrySet());
        Set<Entry<String, Integer>> entrySet = hashMap.entrySet();
//        System.out.println(entrySet);


        //import java.util.Map.Entry;     没提示，要手动导入   或者Map.Entry
        TreeSet<Entry<String, Integer>> treeSet = new TreeSet<>((o1, o2) -> {
            if (o2.getValue() == o1.getValue())
                return 1;      //  根据这个返回值存数据  等于0  ，说明相等，它就不存
            /*TreeSet在存储元素的时候，会调用compareTo方法。两个作用：
            ● 1、排序: 返回值大于0升序，返回值小于0降序
            ● 2、去重(返回值为0) TreeSet认为返回0，两个对象就是相同的对象*/
            return o2.getValue() - o1.getValue();
        });

        treeSet.addAll(entrySet);

        System.out.println(treeSet);

        System.out.println("MAX：" + treeSet.first());

        int i = 1;
        for (Entry<String, Integer> stringIntegerEntry : treeSet) {
            System.out.println(stringIntegerEntry);
            if (i++ == 3) 
                break;
        }
    }
}
